package com.lk.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lk.model.domain.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lk.model.request.UserQueryRequest;
import com.lk.model.request.UserUpdatePassword;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

public interface UserService extends IService<User> {


    /**
     *
     * @param userAccount 用户账户
     * @param userPassword  用户密码
     * @param checkPassword  二次确认密码
     * @return  返回用户id
     */
    long userRegister(String userName,String userAccount,String userPassword,String checkPassword);


    /**
     * @param userAccount  用户账号
     * @param userPassword 用户密码
     * @param request
     * @return 返回脱敏后的用户信息
     */
    User userLogin(String userAccount, String userPassword, HttpServletRequest request);

    /**
     * 用户脱敏
     * @param originUser
     * @return
     */
    User getSafetyUser(User originUser);


    /**
     * 用户注销
     *
     * @param request
     * @return
     */
    boolean userLogout(HttpServletRequest request);



    /**
     * 按标签搜索用户
     *
     * @param tagNameList 标记名称列表
     * @param currentPage 当前页码
     * @return {@link Page}<{@link User}>
     */
    Page<User> searchUsersByTags(List<String> tagNameList, long currentPage);


    /**
     * 获取当前登录用户
     *
     * @param request
     * @return
     */
    User getLoginUser(HttpServletRequest request);

    /**
     * 更新用户信息
     * @param user
     * @return
     */
    int updateUser(User user, User loginUser);


    /**
     * 是否为管理员
     *
     * @param loginUser
     * @return
     */
    boolean isAdmin(User loginUser);


    /**
     * 是否为管理员
     *
     * @param request
     * @return
     */
    boolean isAdmin(HttpServletRequest request);



    /**
     * 判断一个User对象除了id其他属性是否全部为空
     *
     * @param user
     * @return
     */
    boolean exceptIdOthersAllNull(User user);


    /**
     * 匹配用户
     *
     * @param num
     * @param user
     * @return
     */
    List<User> matchUsers(long num, User user);


    /**
     * 当前是否登录
     *
     * @param request
     * @return
     */
    void isLogin(HttpServletRequest request);


    /**
     * 根据id获取好友列表
     *
     * @param currentUser
     * @return
     */
    List<User> getFriendsById(User currentUser);

    boolean deleteFriend(User currentUser, Long id);

    /**
     * 搜索用户
     *
     * @param userQueryRequest
     * @param request
     * @return
     */
    List<User> userQuery(UserQueryRequest userQueryRequest, HttpServletRequest request);

    /**
     * 搜索好友
     *
     * @param userQueryRequest
     * @param currentUser
     * @return
     */
    List<User> searchFriend(UserQueryRequest userQueryRequest, User currentUser);

    /**
     * 收到用户标签
     *
     * @param id id
     * @return {@link List}<{@link String}>
     */
    List<String> getUserTags(Long id);

    /**
     * 更新标记
     *
     * @param tags   标签
     * @param userId 用户id
     */
    void updateTags(List<String> tags, Long userId);

    /**
     * 修改密码
     *
     * @param updatePassword
     * @param currentUser
     * @return
     */
    int updatePasswordById(UserUpdatePassword updatePassword, User currentUser);

    /**
     * redisKey
     *
     * @param key
     * @return
     */
    String redisFormat(Long key);


    /**
     * 随机获取用户
     *
     * @param pageSize
     * @return
     */
    List<User> random(long pageSize);

    /**
     * 获取头像
     * @param userId
     * @return
     */
    String getRealAvatarUrl(Long userId);
}
